home *** CD-ROM | disk | FTP | other *** search
/ Aminet 43 / Aminet 43 (2001)(GTI - Schatztruhe)[!][Jun 2001].iso / Aminet / game / misc / WormWars.lha / WormWars / Source / same.h < prev    next >
Text File  |  2001-04-21  |  15KB  |  426 lines

  1. /* $Filename:    WormWars/Source/same.h
  2.  * $VER:         WormWars 6.6
  3.  * $Description: Header file for Worm Wars
  4.  *
  5.  * © Copyright 2000 James R. Jacobs.
  6.  
  7. SAME ON EACH PLATFORM -------------------------------------------------- */
  8.  
  9. #define elif         else if
  10. #define AGLOBAL      ;       /* global (project-scope) */
  11. #define MODULE       static  /* external static (file-scope) */
  12. #define PERSIST      static  /* internal static (function-scope) */
  13. #define AUTO         auto    /* automatic (function-scope) */
  14.  
  15. /* miscellaneous */
  16.  
  17. #define CAUSEWAIT      100
  18. #define DATELENGTH       8 /* DD/MM/YY */
  19. #define TIMELENGTH       5 /* HH:MM */
  20. #define DEFAULTLEVELS    5
  21. #define ENDXPIXEL     ((STARTXPIXEL + SQUAREX * (FIELDX + 1)) - 1)
  22. #define ENDYPIXEL     ((STARTYPIXEL + SQUAREY * (FIELDY + 1)) - 1)
  23. #define FIELDX          52 /* in squares */
  24. #define FIELDY          38 /* in squares */
  25. #define HISCORES         4
  26. #define LIFEMODULO    1000
  27. #define MAXLEVELS       50 /* assert (MAXLEVELS >= 1 && MAXLEVELS <= 99); */
  28. #define NAMELENGTH      21 /* 0..20 are TEXT, 21 is NULL */
  29. #define NOMODE           0
  30. #define NUMKEYS         28
  31. #define PATIENCE        20
  32. #define SAYLIMIT      ((ENDXPIXEL - STARTXPIXEL) / FONTX)
  33. #define VERSION       "$VER: Worm Wars 6.6 (21.4.2001)"
  34. #define ARROWX        (FIELDX + 1)
  35. #define LEVELSIZE     ((FIELDX + 1) * (FIELDY + 1))
  36. #define HISCORESIZE   (6 + NAMELENGTH + 1 + DATELENGTH + 1 + TIMELENGTH + 1)
  37.  
  38. /* samples */
  39.  
  40. #define FXBORN_DOG        0
  41. #define FXBORN_DRIP       1
  42. #define FXBORN_GOAT       2
  43. #define FXBORN_MISSILE    3
  44. #define FXBORN_ORB        4
  45. #define FXBORN_PENGUIN    5
  46. #define FXBORN_PROTECTOR  6
  47. #define FXDEATH_FRAGMENT  7 // thud
  48. #define FXDEATH_GOAT      8
  49. #define FXDEATH_ORB       9
  50. #define FXDEATH_PENGUIN  10
  51. #define FXDEATH_WORM     11
  52. #define FXDO_BOMB        12 // tick
  53. #define FXDO_ENCLOSE     13
  54. #define FXDO_GOAT        14 // fire
  55. #define FXDO_JUMP        15
  56. #define FXDO_ORB         16 // split
  57. #define FXGET_AMMO       17
  58. #define FXGET_CYCLONE    18
  59. #define FXGET_DRIP       19
  60. #define FXGET_GROWER     20
  61. #define FXGET_OBJECT     21
  62. #define FXGET_NITRO      22
  63. #define FXGET_POWERUP    23
  64. #define FXGET_PULSE      24 // explode
  65. #define FXGET_SKULL      25
  66. #define FXFILENEW        26
  67. #define FXFILEOPEN       27
  68. #define FXFILESAVE       28
  69. #define FXFILESAVEAS     29
  70. #define FXEDITCUT        30
  71. #define FXEDITCOPY       31
  72. #define FXEDITPASTE      32
  73. #define FXEDITDELETE     33
  74. #define FXHELP           34
  75. #define FXUSE_AMMO       35
  76. #define FXUSE_ARMOUR     36
  77. #define FXUSE_BOMB       37
  78. #define FXUSE_TELEPORT   38
  79. #define FXUSE_TONGUE     39
  80. #define FX_C             40
  81. #define FX_O             41
  82. #define FX_M             42
  83. #define FX_P             43
  84. #define FX_L             44
  85. #define FX_E             45
  86. #define FX_T             46
  87. #define FXPAIN           47
  88. #define FXAPPLAUSE       51 // after each new hiscore
  89. #define FXGAMEOVER       52 // if all worms are dead
  90. #define FXCELEBRATE      53 // if game succeeded
  91. #define FXCLICK          54 // rundown, keypresses
  92. #define FXLAUNCH         55 // title screen
  93. #define FXRIFF           56 // after each rundown
  94. #define FXSIREN          57 // out of time
  95. #define SAMPLES          FXSIREN
  96. #define FXCENTRE         FXDEATH_PENGUIN
  97. #define FXDO_CLOUD       FXDO_GOAT
  98. #define FXFX             FXLAUNCH
  99. #define FXRUNDOWN        FXCLICK
  100. #define FXUSE_PROTECTOR  FXBORN_PROTECTOR
  101.  
  102. /* key types */
  103.  
  104. #define MOVE              0 /* not AMMO, TRAINER, ONEHUMAN */
  105. #define TRAINER           2 /* not MOVE, AMMO, ONEHUMAN */
  106. #define ONEHUMAN          3 /* not MOVE, AMMO, TRAINER */
  107.  
  108. /* speeds */
  109.  
  110. #define VERYFAST          1
  111. #define FAST              2
  112. #define NORMAL            4
  113. #define SLOW              8
  114. #define VERYSLOW         16 /* must be non-0 */
  115.  
  116. /* The constant NORMAL is used for several purposes:
  117.     a)    as a speed (therefore must not be VERYFAST, FAST, SLOW
  118.             or VERYSLOW);
  119.     b)    as a blitmode (therefore must not be BLACK or WHITE); and
  120.     c)    as a pointer (therefore must not be GOLD, SILVER, EMPTY,
  121.             WOOD or STONE).
  122.  
  123. stats */
  124.  
  125. #define AMMOLIMIT       100
  126. #define BIASLIMIT       100
  127. #define FREEDOMLIMIT    100
  128. #define STARTLIVES      100
  129. #define LIVESLIMIT      200
  130. #define MODELIMIT       100
  131. #define MULTILIMIT        8 /* don't set >8! */
  132. #define POWERLIMIT        6
  133. #define SCORELIMIT 99999999 // 99 million
  134.  
  135. /* Field values...
  136. These are objects. */
  137.     #define AFFIXER                 0
  138.     #define AMMO                 1
  139.     #define ARMOUR                 2
  140.     #define BIAS                 3
  141.     #define BOMB                 4
  142.     #define BONUS                 5
  143.     #define CLOCK                 6
  144.     #define CONVERTER             7
  145.     #define CUTTER               8
  146.     #define CYCLONE              9
  147.     #define FREEDOM             10
  148.     #define GROWER              11
  149.     #define HEALER              12
  150.     #define ICE                 13
  151.     #define LIFE                14
  152.     #define LIGHTNING           15
  153.     #define MAGNET              16
  154.     #define MISSILE             17
  155.     #define MULTIPLIER          18
  156.     #define NITRO               19
  157.     #define POWER               20
  158.     #define PROTECTOR           21
  159.     #define PULSE               22
  160.     #define PUSHER              23
  161.     #define REMNANTS            24
  162.     #define SIDESHOT            25
  163.     #define SLAYER              26
  164.     #define SLOWER              27
  165.     #define SWITCHER            28
  166.     #define TONGUE              29
  167.     #define TREASURE            30
  168.     #define UMBRELLA            31
  169.     #define LASTOBJECT            UMBRELLA
  170. /* These are `empty'. */
  171.         #define EMPTY                   (LASTOBJECT + 1)
  172.         #define SILVER                  (LASTOBJECT + 2)
  173.         #define GOLD                    (LASTOBJECT + 3)
  174.         #define FIRSTEMPTY              EMPTY
  175.         #define LASTEMPTY               GOLD
  176.     #define LASTGOATFIRE        LASTEMPTY
  177. /* Nothing special about the following... */
  178.         #define TELEPORT                (GOLD + 1)
  179.         #define FRAGMENT                (GOLD + 2)
  180.         #define ORB                     (GOLD + 3)
  181.     #define FIRSTPROTECTOR        (GOLD + 4)
  182.     #define LASTPROTECTOR        (GOLD + 7)
  183. /* Margins indicate `ranges' for:
  184.    n: orb bouncing, normal mode.
  185.    t: orb bouncing, tongue mode.
  186.    a: orb bouncing, armour mode.
  187.    g: goats. */
  188.         #define  GREEN_C                        (GOLD +  8)      
  189.         #define    RED_O                        (GOLD +  9)
  190.         #define   BLUE_M                        (GOLD + 10)
  191.         #define YELLOW_P                        (GOLD + 11)
  192.         #define  GREEN_L                        (GOLD + 12)
  193.         #define    RED_E                        (GOLD + 13)
  194.         #define   BLUE_T                        (GOLD + 14)
  195.         #define YELLOW_E                        (GOLD + 15)
  196.         #define SKULL                           (GOLD + 16)             /* n t a g */
  197.         #define SLIME                           (GOLD + 17)             /*     [ [ */
  198.         #define STONE                           (GOLD + 18)             /* [ [ | | */
  199.         #define GOAT                            (GOLD + 19)             /* ] | | | */
  200.         #define WOOD                            (GOLD + 20)             /*   | ] | */
  201.         #define FIRSTTAIL                       (GOLD + 21)             /*   |   | */
  202.         #define LASTTAIL                        (GOLD + 24)             /*   ]   ] */
  203.         #define FIRSTLETTER        GREEN_C
  204.         #define FIRSTNONE          STONE
  205.         #define FIRSTTONGUE        STONE
  206.         #define FIRSTARMOUR        SLIME
  207.         #define FIRSTGOAT          SLIME
  208.         #define LASTLETTER         YELLOW_E
  209.         #define LASTNONE           LASTTAIL
  210.         #define LASTTONGUE         GOAT
  211.         #define LASTARMOUR         GOAT
  212.         #define LASTGOAT           LASTTAIL
  213.         #define LETTERS            (LASTLETTER - FIRSTLETTER)
  214.  
  215.         #define ORBTONGUE          (LASTTAIL +  1)
  216.         #define ORBARMOUR          (LASTTAIL +  2)
  217.         #define FIRSTFIRE          (LASTTAIL +  3)
  218.         #define LASTFIRE           (LASTTAIL +  6)
  219.         #define FIRSTMISSILE       (LASTTAIL +  7)
  220.         #define LASTMISSILE        (LASTTAIL + 10)
  221.         #define START              (LASTTAIL + 11)
  222.         #define MUSIC              (LASTTAIL + 12)
  223.         #define FX                 (LASTTAIL + 13)
  224.         #define ZERO               (LASTTAIL + 14)
  225.         #define TIMEBOMB            ZERO
  226.         #define       HEAD         (ZERO + 10)
  227.         #define  GREENHEADUP        HEAD
  228.         #define    REDHEADUP       (HEAD +  1)
  229.         #define   BLUEHEADUP       (HEAD +  2)
  230.         #define YELLOWHEADUP       (HEAD +  3)
  231.         #define  FIRSTHEAD         GREENHEADUP
  232.         #define   LASTHEAD         YELLOWHEADUP
  233.         #define  GREENHEADDOWN     (HEAD +  4)
  234.         #define    REDHEADDOWN     (HEAD +  5)
  235.         #define   BLUEHEADDOWN     (HEAD +  6)
  236.         #define YELLOWHEADDOWN     (HEAD +  7)
  237.         #define  GREENHEADLEFT     (HEAD +  8)
  238.         #define    REDHEADLEFT     (HEAD +  9)
  239.         #define   BLUEHEADLEFT     (HEAD + 10)
  240.         #define YELLOWHEADLEFT     (HEAD + 11)
  241.         #define  GREENHEADRIGHT    (HEAD + 12)
  242.         #define    REDHEADRIGHT    (HEAD + 13)
  243.         #define   BLUEHEADRIGHT    (HEAD + 14)
  244.         #define YELLOWHEADRIGHT    (HEAD + 15)
  245.         #define  GREENMODEUP       (HEAD + 16)
  246.         #define    REDMODEUP       (HEAD + 17)
  247.         #define   BLUEMODEUP       (HEAD + 18)
  248.         #define YELLOWMODEUP       (HEAD + 19)
  249.         #define  GREENMODEDOWN     (HEAD + 20)
  250.         #define    REDMODEDOWN     (HEAD + 21)
  251.         #define   BLUEMODEDOWN     (HEAD + 22)
  252.         #define YELLOWMODEDOWN     (HEAD + 23)
  253.         #define  GREENMODELEFT     (HEAD + 24)
  254.         #define    REDMODELEFT     (HEAD + 25)
  255.         #define   BLUEMODELEFT     (HEAD + 26)
  256.         #define YELLOWMODELEFT     (HEAD + 27)
  257.         #define  GREENMODERIGHT    (HEAD + 28)
  258.         #define    REDMODERIGHT    (HEAD + 29)
  259.         #define   BLUEMODERIGHT    (HEAD + 30)
  260.         #define YELLOWMODERIGHT    (HEAD + 31)
  261.         #define METAL              (HEAD + 32)
  262.         #define FIRSTDRIP          (HEAD + 33)
  263.         #define DRIP               FIRSTDRIP
  264.         #define LASTDRIP           (HEAD + 36)
  265.         #define BLACKENED          (HEAD + 37)
  266.         #define WHITENED           (HEAD + 38)
  267.         #define PENGUIN            (HEAD + 39)
  268.         #define WHIRLWIND          (HEAD + 40)
  269.         #define DOG                (HEAD + 41) /* dog chasing */
  270.         #define DOGAWAKENING       (HEAD + 42)
  271.         #define DOGDORMANT         (HEAD + 43)
  272.         #define CLOUD              (HEAD + 44)
  273.         #define ALL                (HEAD + 45)
  274.         #define FIRSTARROW         (HEAD + 46)
  275.         #define LASTARROW          (HEAD + 49)
  276.         #define DYNAMITE           (HEAD + 50)
  277.         #define OCTOPUS            (HEAD + 51)
  278.         #define ARRAYSIZE          OCTOPUS
  279.  
  280.         #define ANYTHING           STONE // should be something that is valid field contents
  281.  
  282. /* These have no imagery. */
  283.         #define TEMPTAIL         (ARRAYSIZE + 1)
  284.         #define TEMPWOOD         TEMPTAIL
  285.         #define TEMPSLIME        TEMPTAIL
  286.         #define TEMPLIGHTNING    TEMPTAIL
  287.         #define TEMPSILVER       (ARRAYSIZE + 2)
  288.         #define TEMPGOLD         (ARRAYSIZE + 3)
  289.         #define NOSQUARE         (ARRAYSIZE + 4)
  290.         #define BANGDYNAMITE     (ARRAYSIZE + 5)
  291.         #define TEMPBANGDYNAMITE (ARRAYSIZE + 6)
  292.  
  293. /* game status
  294.  */
  295.  
  296. #define GAMEOVER        0
  297. #define PLAYGAME        1
  298. #define FIELDEDIT       2
  299. #define TITLESCREEN     3
  300.  
  301. /* indicator locations */
  302.  
  303. #define CAUSEYDISTANCE  2 /* distance from centre for cause */
  304. #define LETTERYDISTANCE 3 /* distance from centre for letters */
  305. #define ICONY           (FIELDY / 2)
  306. #define MUSICICON       (FIELDX + 3)
  307. #define CLOCKICON       (FIELDX + 4)
  308.  
  309. /* control values */
  310.  
  311. #define NONE            0 /* must be 0
  312.  */
  313. #define AMIGA           1
  314. #define JOYSTICK        2
  315. #define KEYBOARD        3
  316. #define IBMPC           AMIGA
  317.  
  318. /* PROTOTYPES -------------------------------------------------------------
  319.  
  320. engine.c */
  321.  
  322. AGLOBAL void clearhiscores(void);
  323. AGLOBAL void enginesetup(void);
  324. AGLOBAL void gameloop(void);
  325. AGLOBAL void levelappend(void);
  326. AGLOBAL void leveldelete(void);
  327. AGLOBAL void levelerase(void);
  328. AGLOBAL void levelinsert(void);
  329. AGLOBAL void matchteleports(void);
  330. AGLOBAL void newfields(void);
  331. AGLOBAL void newgame(void);
  332. AGLOBAL void timeloop(void);
  333.  
  334. AGLOBAL void align(STRPTR string, SBYTE size, TEXT filler);
  335. AGLOBAL void drawhead(SBYTE player, SBYTE x, SBYTE y);
  336. AGLOBAL void drawsquare(SBYTE x, SBYTE y);
  337. AGLOBAL void icon(SBYTE player, UBYTE image);
  338. AGLOBAL void saylevel(COLOUR colour);
  339. AGLOBAL void train(SCANCODE scancode);
  340. AGLOBAL void wormqueue(SBYTE player, SBYTE deltax, SBYTE deltay);
  341. AGLOBAL void wormscore(SBYTE player, LONG score);
  342.  
  343. AGLOBAL SBYTE loadfields(STRPTR pathname);
  344. AGLOBAL SBYTE partner(SBYTE which);
  345. AGLOBAL ABOOL savefields(STRPTR pathname);
  346. AGLOBAL SBYTE valid(SBYTE x, SBYTE y);
  347. AGLOBAL SBYTE xwrap(SBYTE x);
  348. AGLOBAL SBYTE ywrap(SBYTE y);
  349.  
  350. /* system.c */
  351.  
  352. AGLOBAL void celebrate(void);
  353. AGLOBAL void clearjoystick(void);
  354. AGLOBAL void clearkybd(void);
  355. AGLOBAL void clearscreen(void);
  356. AGLOBAL void datestamp(void);
  357. AGLOBAL void gameinput(void);
  358. AGLOBAL void hiscores(void);
  359. AGLOBAL void joy0(void);
  360. AGLOBAL void resettime(void);
  361. AGLOBAL void sendreadrequest(void);
  362. AGLOBAL void systemsetup(void);
  363. AGLOBAL void timing(void);
  364. AGLOBAL void titlescreen(void);
  365. AGLOBAL void turborender(void);
  366. AGLOBAL void waitasec(void);
  367.  
  368. AGLOBAL void cleanexit(SLONG rc);
  369. AGLOBAL void draw(SBYTE x, SBYTE y, UBYTE image);
  370. AGLOBAL void effect(SBYTE index);
  371. AGLOBAL void fileopen(ABOOL revert);
  372. AGLOBAL void filesaveas(ABOOL flag);
  373. AGLOBAL void flash(ULONG where);
  374. AGLOBAL void rundown(SBYTE player);
  375. AGLOBAL void say(STRPTR sentence, COLOUR colour);
  376. AGLOBAL void stat(SBYTE player, SBYTE line);
  377. AGLOBAL void stopfx(void);
  378. AGLOBAL void ReadAdapterJoystick(UBYTE unit);
  379.  
  380. AGLOBAL ABOOL anykey(ABOOL timeout);
  381. AGLOBAL ABOOL verify(void);
  382. AGLOBAL ABOOL ZOpen(STRPTR fieldname, ABOOL write);
  383. AGLOBAL ABOOL ZRead(STRPTR IOBuffer, ULONG length);
  384. AGLOBAL ABOOL ZWrite(STRPTR IOBuffer, ULONG length);
  385. AGLOBAL ABOOL ZClose(void);
  386.  
  387. AGLOBAL void help(UBYTE type);
  388. AGLOBAL void helpabout(void);
  389. AGLOBAL void helploop(UBYTE type);
  390. AGLOBAL void toggle(SBYTE key);
  391. AGLOBAL void filedelete(void);
  392.  
  393. // fe.c
  394. AGLOBAL void fieldedit(void);
  395. AGLOBAL void setbrush(UBYTE newbrush);
  396.  
  397. /* PUBLIC STRUCTURES ------------------------------------------------------ */
  398.  
  399. AGLOBAL struct HiScoreStruct
  400. {   SBYTE player, level;
  401.     SLONG score;                /* the score itself */
  402.     TEXT  name[NAMELENGTH + 2];    /* name of the player */
  403.     ABOOL fresh;                /* is the entry new? */
  404.     TEXT  date[DATELENGTH + 1],    /* date of achievement */
  405.           time[TIMELENGTH + 1];    /* time of achievement */
  406. };
  407. AGLOBAL struct WormStruct
  408. {   SBYTE  x, y, deltax, deltay, position, posidir, victor, cause,
  409.            statx, staty, pos, multi, power, mode, last, levelreached,
  410.            arrowy;
  411.     ABOOL  affixer, remnants, alive, moved, nitro, pusher,
  412.            sideshot, flashed, rammed;
  413.     UBYTE  speed, control;
  414.     SWORD  armour, tongue, ammo, bias, cutter, ice, lives, freedom;
  415.     SLONG  score, oldscore, hiscore, dynamitescore;
  416.     ULONG  causewait;
  417.     TEXT   name[NAMELENGTH + 1];
  418.     COLOUR colour;
  419. };
  420. AGLOBAL struct TeleportStruct
  421. {   SBYTE x, y;
  422.     ABOOL alive;
  423. };
  424.  
  425. /* Must have blank line at EOF. */
  426.